package com.wondream.domain;

import lombok.Data;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author wondream
 * @version 1.0
 * @create 2022/5/11 9:04 AM
 */
@Data
@Entity
// 使用注解建立实体类和数据表之间的对应关系 name指向表名
@Table(name = "Article")
public class Article {

    @Id // 标识这是主键字段
    // 主键生成策略 GenerationType.IDENTITY对应数据库的自增策略
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "aid")
    private Integer aid;

    // 使用@Column映射类的属性和数据表的字段关系 name指向表中的字段名
    // 当类的属性名和数据表的字段名一致时，此注解可省略
    @Column(name = "author")
    private String author;

    @Column(name = "createTime")
    private Date createTime;

    @Column(name = "title")
    private String title;

    // 声明类间关系
    // 在类中使用注解再声明表间关系
    // 明确谁来维护关系(OneToOne,JoinColum)，谁放弃关系(OneToOne(mappedBy="当前类在对方类中的属性名"))
    @OneToOne(mappedBy = "article", cascade = CascadeType.PERSIST)
    private ArticleData articleData;

    @OneToMany(mappedBy = "article", cascade = CascadeType.PERSIST)
    private List<ArticleComment> articleComments = new ArrayList<>();

    @ManyToMany(mappedBy = "articles", cascade = CascadeType.PERSIST)
    private List<Category> categories = new ArrayList<>();
}
